package com.sy.controller.user;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sy.context.BaseContext;
import com.sy.dto.CoursePageQueryDTO;
import com.sy.pojo.Course;
import com.sy.pojo.CourseType;
import com.sy.pojo.CourseUser;
import com.sy.pojo.Coursedetail;
import com.sy.properties.JwtProperties;
import com.sy.result.PageResult;
import com.sy.result.Result;
import com.sy.service.CourseService;
import com.sy.service.CourseTypeService;
import com.sy.service.CourseUserService;
import com.sy.service.CoursedetailService;
import com.sy.utils.FastDFSClient;
import com.sy.vo.CourseDetailVO;
import com.sy.vo.CourseIndexVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.time.LocalDateTime;
import java.util.List;

@Api(tags = "课程管理相关接口")
@Slf4j
@RestController("userCourseController")
@RequestMapping("/user/course")
public class CourseController {
    @Autowired
    private CourseService courseService;

    @Autowired
    private JwtProperties jwtProperties;

    @Autowired
    private CourseUserService courseUserService;

    //课程查询
    @GetMapping("findAll")
    @ApiOperation("用户端-首页课程查询")
    public Result<List<CourseIndexVO>> findAll( ){
        //调用业务获取分页查询
        List<CourseIndexVO>  allSales= courseService.findSales();

        return Result.success(allSales);

    }

    //用户端-全部查询
    @GetMapping("findAllCourse")
    @ApiOperation("用户端-全部课程查询")
    public Result<PageResult> findAllCourse(CoursePageQueryDTO coursePageQueryDTO){
        log.info("用户端-全部课程查询：{}",coursePageQueryDTO);
        //调用业务获取分页查询
        PageResult  pageResult= courseService.findAllCourse(coursePageQueryDTO);

        return Result.success(pageResult);

    }

    @GetMapping("getCourseDetail")
    @ApiOperation("用户端-查看课程详情")
    @ApiImplicitParam(name = "cid",value = "课程的id",required = true,
            dataTypeClass = Integer.class)
    public Result getCourseDetail(Integer cid ){
        log.info("用户端-查看课程详情：{}",cid);
        //调用业务获取分页查询
       CourseDetailVO courseDetailVO =courseService.getCourseDetail(cid);

        return Result.success(courseDetailVO);

    }


    //判断当前登录用户有没有购买课程的方法
    //带auth的路径会被请求拦截器拦截，需要登录才能访问当前处理器
    @GetMapping("/auth/ifShoppingCourse")
    @ApiOperation("判断当前登录用户有没有购买课程")
    @ApiImplicitParam(name = "cid",value = "课程的id",required = true,
            dataTypeClass = Integer.class)
    public Result ifShoppingCourse(Integer cid ){
        log.info("用户端-查看课程详情：{}",cid);
       //获取当前登录的用户有没有购买课程
        Long userid= BaseContext.getCurrentId();
        //从course_user表中查询用户选择的课程，因为用户购买课程后，会在course_user表中
        //产生用户选课信息，例如用户2购买了课程1，会在course_user表中记录，用户2，购买课程1
        LambdaQueryWrapper<CourseUser> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.eq(CourseUser::getCid,cid).eq(CourseUser::getUid,userid);
        CourseUser courseUser = courseUserService.getOne(queryWrapper);
        if(courseUser!=null){
            return Result.success();
        }else {
            return Result.error("没购买这个课程");
        }
    }

}
